// 封装用户的接口操作
import axios from '@/utils/request'
import { getStorage } from '@/utils/storage'

// 用户 -> 登录
export const login = ({ mobile, code }) =>
  axios({
    url: '/v1_0/authorizations',
    method: 'POST',
    data: {
      mobile,
      code
    }
  })

// 用户 -> 关注
export const attentionUser = ({ atten_id }) => axios({
  url: '/v1_0/user/followings',
  method: 'POST',
  data: {
    target: atten_id
  }
})

// 用户 -> 取消关注
export const unfollow = ({ target }) => axios({
  url: `/v1_0/user/followings/${target}`,
  method: 'DELETE'
})

// 用户 —> 个人信息
export const userInformation = () => axios({
  url: '/v1_0/user'
})

// 用户 -> 个人资料
export const personalData = () => axios({
  url: '/v1_0/user/profile'
})

/**
 * 如果你的请求体里直接是FormData对象，不用添加
 * Content-Type, axios发现数据请求体是表单对象，他不会转换成JSON字符串
 * 也不会带Content-Type:application/json, 而是交给浏览器，浏览器发现请求体是FormData会自己携带Content-Type:application/json
 *
 * Content-Type:application/json axios携带的，前提:data请求体是对象 —> json字符串 -> 发给后台
 * Content-Type:multipart/form-data 浏览器携带的，前提：data请求体必须是FormData类型对象
 */
// 用户 -> 上传头像
export const uploadUserIcon = (fs) => axios({
  url: '/v1_0/user/photo',
  method: 'PATCH',
  data: fs
})

// 用户 -> 编辑用户信息
export const editAccountInfo = (dataObj) => {
  const obj = {
    name: '', // 昵称
    gender: 0, // 性别
    birthday: '', // 生日
    real_name: '', // 真实姓名
    intro: ''// 个人介绍
  }
  // 遍历对象的每个键 如果传来的对象中的这键为undefined则删除，否则将此键赋值
  for (const key in obj) {
    if (dataObj[key] === undefined) {
      delete dataObj[key]
    } else {
      obj[key] = dataObj[key]
    }
  }
  return axios({
    url: '/v1_0/user/profile',
    method: 'PATCH',
    data: obj
  })
}

// 用户 -> 刷新token
export const refreshToken = () => axios({
  url: '/v1_0/authorizations',
  method: 'PUT',
  headers: {
    Authorization: 'Bearer ' + getStorage('refresh_token')
  }
})
